<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="//gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.69.0" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Django和redis &middot; 我的博客</title>

  
  <link type="text/css" rel="stylesheet" href="/hugoblog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/hugoblog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/hugoblog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/hugoblog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  
</head>

  <body class="theme-base-0self ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/hugoblog/"><h1>我的博客</h1></a>
      <p class="lead">
       这里是骆建宇的个人博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/hugoblog/">Home</a> </li>
        
      </ul>
    </nav>

    <p>&copy; 2020. All rights reserved. </p>
  </div>
</aside>

    <main class="content container">
    <div class="post">
  <h1>Django和redis</h1>
  <time datetime=2020-04-26T15:46:05&#43;0800 class="post-date">Sun, Apr 26, 2020</time>
  <p>#### 1.django简易登录</p>
<pre><code>#登录接口
class Login(APIView):
    def get(self,request):
        # 接收参数
        username =request.GET.get('username',None)
        password =request.GET.get('password',None)
        # 查询数据:.get
        user = User.objects.filter(username=username,password=make_password(password)).first()
        if user:
            return Response({'code':200,'message':'登录成功','uid':user.id,'username':user.username})
        else:
            return Response({'code':403,'message':'你的用户名或密码错误'})
</code></pre><p>#### 2.redis连接</p>
<pre><code># 导包
import redis

# 定义ip和端口
host = &quot;localhost&quot;
port = 6379

# 建立链接
r = redis.Redis(host=host,port=port)

# 赋值
r.set('test','test')

# 取值
code = r.get('test')

# 转码
code =code.decode(&quot;utf-8&quot;)

print(code)
</code></pre><p>#### 3.django验证码</p>
<pre><code># 自定义图片验证码
class MyCode(View):
    # 定义rgb随机颜色
    def get_random_color(self):
        R = random.randrange(255)
        G = random.randrange(255)
        B = random.randrange(255)
        return (R,G,B)
    # 定义图片视图
    def get(self,request):
        # 画布
        img_size = (120,50)
        # 定义图片对象
        image = Image.new('RGB',img_size,'white')
        # 定义画笔
        draw = ImageDraw.Draw(image,'RGB')
        source = '0123456789asdfgghjkl'
        # 接收容器
        code_str = ''
        for i in range(4):
            # 获取字母颜色
            text_color = self.get_random_color()
            # 获取随机下标
            tmp_num = random.randrange(len(source))
            # 随机字符串
            random_str = source[tmp_num]
            # 装入容器
            code_str += random_str
            # 绘制字符串
            draw.text((10+30*i,20),random_str,text_color)
        # 获取缓存区
        buf =io.BytesIO()
        # 将临时图片保存到缓冲
        image.save(buf,'png')
        # 保存随机码
        r.set('code',code_str)
        print(r.get('code'))
        return HttpResponse(buf.getvalue(),'image/png')

</code></pre><p>#### 4.redis操作</p>
<pre><code>redis-cli # 进入
exit # 退出
</code></pre><p>#### 5.redis的基本数据类型有五大类：String类型，list类型，set类型，zset类型，hash类型。</p>
<pre><code>5.1、操作string类型的命令：
    
    1.插入string类型的数据结构
    set keyname1 keyValue -- 插入string类型的redis key
    2.获取string类型的数据结构
    get keyname1
    3.删除key
    del keyname1
5.2 哈希HASH:
    1, 插入一个哈希结构的字段
    hset key value
    2，删除一个或多个哈希表字段
    hdel key field [field2] value
5.3 列表List:
    1. 插入一个list结构的数据
    lpush key value1,value2,,,,
    2. 查看list结构的redis  key
    lrange start stop
    3. 从右边插入
    rpush key value1,value2,,,
    4, 从右边遍历输出
5.4 集合set:
    set集合是string类型的无序集合。集合成员是唯一的。添加删除查找的复杂度是O（1）
    1. 插入set集合（语法：sadd key member member....）
    sadd runsetkey redis
    sadd runsetkey mongodb
    sadd runsetkey mysql
    sadd runsetkey mysql
5.5 有序集合:
    1. 插入有序集合
    zadd key index value[values]
    2. 获取成员数目
    ZCARD key
    3. 计算在有序集合中指定区间分数的成员数
    ZCOUNT key min max
    4. 有序集合中对指定成员的分数加上增量increment
    ZINCRBY key increment member

</code></pre>
</div>


    </main>

    
  </body>
</html>
